﻿using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;

namespace iTool.ValidationExtend
{
    public class PasswordAttribute : ValidationAttribute
    {
        public PasswordAttribute()
        {
            base.ErrorMessage = "密码必须包含数字,大小写字母,特殊符号,并且至少8位长度！";
        }
        public override bool IsValid(object value)
        {
            if (value == null)
            {
                return false;
            }

            if (string.IsNullOrWhiteSpace(value.ToString()))
            {
                return false;
            }

            var regex = new Regex(@"
                                    (?=.*[0-9])                     #必须包含数字
                                    (?=.*[a-zA-Z])                  #必须包含小写或大写字母
                                    (?=([\x21-\x7e]+)[^a-zA-Z0-9])  #必须包含特殊符号
                                    .{8,20}                         #至少8个字符，最多30个字符
                                    ", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);

            return regex.IsMatch(value.ToString());
        }
    }
}
